package com.zhe.zheblogmaster.mapper;

import com.zhe.zheblogmaster.entity.Blog;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author ZHE
 */
@Repository
public interface BlogMapper {

    /**
     * 根据Map中的条件查询博客
     * <p>
     * 可封装选项如下：
     * keyword 关键字
     * blogStatus 博客状态 0-草稿 1-发布
     * blogCategoryId 博客分类id
     *
     * @param condition 封装在 Map<String,Object> 中的查询条件
     * @return 查询到的博客列表
     */
    List<Blog> selectBlogSelective(Map<String, Object> condition);

    /**
     * 获取最新的博客记录
     *
     * @param limit 获取数目
     * @return 返回最新的limit条博客记录
     */
    List<Blog> selectLatestBlogList(int limit);

    /**
     * 查询点击最多的 limit 条博客记录
     *
     * @param limit 获取数目
     * @return 返回点击最多的 limit 条博客记录
     */
    List<Blog> selectHotBlogList(int limit);

    /**
     * 获取关于页内容
     *
     * @return 返回查询结果
     */
    @Select("select blog_content as blogContent from tb_blog where blog_id=0")
    String selectAboutBlog();

    /**
     * 根据博客id查找博客
     *
     * @param blogId 博客id
     * @return 返回查询到的博客信息
     */
    Blog selectById(Long blogId);

    /**
     * 根据博客id修改博客浏览量
     *
     * @param blogId 博客id
     * @param views  博客浏览量
     * @return 受影响行数
     */
    int updateBlogViewsById(Long blogId, Long views);

    /**
     * 获取博客数量
     *
     * @return 返回博客数量
     */
    Integer selectCount();

    int insertSelective(Blog blog);

    int deleteBlogBatchById(Long[] ids);

    int updateBlogByIdSelective(Blog blog);

    int updateBlogCategory(@Param("categoryName") String categoryName,
                           @Param("newCategoryId") Integer newCategoryId,
                           @Param("oldCategoryIds") Integer[] ids);
}
